//
//  CZCommentStatus.swift
//  GZWeibo666
//
//  Created by Wu  on 16/05/2.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

class CZCommentStatus: NSObject
{
    /*
        created_at	string	评论创建时间
        id	int64	评论的ID
        text	string	评论的内容
        source	string	评论的来源
        user	object	评论作者的用户信息字段 详细
        mid	string	评论的MID
        idstr	string	字符串型的评论ID
        status	object	评论的微博信息字段 详细
        reply_comment	object	评论来源评论，当本评论属于对另一评论的回复时返回此字段
    */
    
    //转发创建时间。
    var created_at : String?
    
    //微博的ID
    var id : Int = 0
    
    //微博信息的内容
    var text : String?
    
    //微博来源
    var source : String?
    
    //微博作者的用户信息字段
    var user : CZUser?
    
    //评论的微博信息字段 详细
    var status: CZStatus?
    
    //转发的微博信息字段
    var retweeted_status : String?
    
    /// 对象信息
    override var description: String
    {
        // 数组存放的是需要打印的属性
        let properties = ["created_at", "id", "text", "source", "user", "status", "retweeted_status"]
        
        // 根据传入数组作为字典的key,value会从模型里面自动获取
        // \n 换行 \t table
        return "\n \t 微博模型: \(dictionaryWithValuesForKeys(properties))"
    }
    
    
    /// 字典转模型
    init(dict: [String: AnyObject])
    {
        super.init()    // 创建对象
        
        // 有了对象,才能调用对象的方法
        // KVC字典转模型
        setValuesForKeysWithDictionary(dict)
    }
    
    //拦截
    override func setValue(value: AnyObject?, forKey key: String)
    {
        if key == "user"
        {
            if let dict = value as? [String: AnyObject]
            {
                // 在这里字典转模型, 赋值给user属性
                user = CZUser(dict: dict)
            }
            return
        }
        super.setValue(value, forKey: key)
    }
    
    /// KVC字典转模型时,字典的key在模型中找不到对应的属性时会调用,在这个方法里面可以什么都不做
    override func setValue(value: AnyObject?, forUndefinedKey key: String)
    {
        
    }
    
    
    //获取网络的转发数据
    class func loadCommentStatuses(id:Int ,comment: String, finished: (commentStatus: [CZCommentStatus]?, error: NSError?) -> ())
    {
        CZNetworkTool.sharedInstance.commentStatuses(id, comment: comment, finished: { (result, error) -> () in
            // 判断是否有错误
            if error != nil || result == nil
            {
                print("error: \(error)")
                // 告诉调用者,出错了
                finished(commentStatus: nil, error: error)
                return
            }
            
            print("reslut: \(result)")
            
            // 加载到微博数据, 字典转模型
            if let array = result!["status"] as? [[String: AnyObject]]
            {
                // 创建一个数组来存放转好的模型
                var commentStatuses = [CZCommentStatus]()
                
                // 遍历数组,获取里面的每一个字典,
                for dict in array {
                    // 字典转模型
                    let commentStatus = CZCommentStatus(dict: dict)
                    commentStatuses.append(commentStatus)
                }
                
                // 字典转模型完成, 告诉调用者,有模型数据
                
                finished(commentStatus: commentStatuses, error: nil)
            }
            else
            {
                // 返回的数据不能字典转模型,告诉调用者,没有模型数据
                finished(commentStatus: nil, error: nil)
//                print("没有模型数据")
            }
            // 判断是否有错误
            if error != nil
            {
                print("error: \(error)")
                // 告诉调用者,出错了
                finished(commentStatus: nil, error: error)
                return
            }
            
            // 加载到微博数据, 字典转模型
            if let array = result!["status"] as? [[String: AnyObject]]
            {
                // 创建一个数组来存放转好的模型
                var commentStatuseses = [CZCommentStatus]()
                
                // 遍历数组,获取里面的每一个字典,
                for dict in array {
                    // 字典转模型
                    let commentStatus = CZCommentStatus(dict: dict)
                    commentStatuseses.append(commentStatus)
                }
                
                // 字典转模型完成, 告诉调用者,有模型数据
                
                finished(commentStatus: commentStatuseses, error: nil)
            }
            else
            {
                // 返回的数据不能字典转模型,告诉调用者,没有模型数据
                finished(commentStatus: nil, error: nil)
                print("没有模型数据")
            }
        })
    }
}
